package com.ziyun.erp.modules.order.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.ziyun.erp.modules.logistics.dto.ErpLogisticsDto;
import com.ziyun.erp.modules.order.dto.OrderPaymentDto;
import com.ziyun.erp.modules.order.dto.PaperItemAuditDto;
import com.ziyun.erp.modules.order.entity.*;
import com.ziyun.erp.modules.order.vo.OrderBonusVo;
import com.ziyun.erp.modules.order.vo.OrderInfoVo;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;

import java.util.List;
import java.util.Map;

/**
 * 订单基础信息表
 *
 * @author guizhao
 * @email ...
 * @date 2018-08-03 10:40:47
 */
public interface OrderInfoService extends IService<OrderInfoEntity> {

    /**
     * 查询销售订单列表
     * @param params
     * @return
     */
    R queryPageOrderList(Map<String, Object> params);

    /**
     * 查询大纸订单列表
     * @param params
     * @return
     */
    PageUtils queryPagePaperOrderList(Map<String,Object> params);

    /**
     * 同步紫云网新生产订单
     * @param page
     * @param startTime
     * @return
     */
    Page<OrderInfoEntity> selectNotSynZiyunOrderPage(Page<OrderInfoEntity> page, String startTime);

    /**
     *  订单支付
     * @param orderInfoEntity 订单信息
     * @param userPayment 支付信息
     * @param userPaymentBill 支付关联信息
     * @return
     */
    boolean orderPay(OrderInfoEntity orderInfoEntity, UserPaymentEntity userPayment, UserPaymentBillEntity userPaymentBill);

    /**
     *  订单调价
     * @param orderInfoEntity 订单信息
     * @param orderRemarksEntity 备注信息
     * @param orderNo 内部订单号
     * @return
     */
    boolean orderDiscountAudit(OrderInfoEntity orderInfoEntity, OrderRemarksEntity orderRemarksEntity, String orderNo);

    /**
     * 同步 紫云网订单支付信息;查询所有已同步订单，支付信息变更的订单
     * @param page
     * @return
     */
    Page<OrderInfoEntity> selectPayChangeZiyunOrderPage(Page<OrderInfoEntity> page);

    /**
     * 查询紫云网确认收货信息
     * @param page
     * @return
     */
    Page<OrderInfoEntity> selectReceiveChangeZiyunOrderPage(Page<OrderInfoEntity> page);

    /**
     * 查询紫云网取消订单信息
     * @param page
     * @return
     */
    Page<OrderInfoEntity> selectCancleChangeZiyunOrderPage(Page<OrderInfoEntity> page);

    /**
     * 根据会员ID查询订单
     * @param params
     * @param memberId
     * @return
     */
    PageUtils queryPage(Map<String, Object> params,Integer memberId);

    /**
     *  查询订单详情
     * @param orderId 订单号
     * @return
     */
    OrderInfoVo selectOrderInfoVoById(Long orderId);

    /**
     * 订单作废
     * @param orderId
     * @param remarks
     * @return
     */
    boolean orderInvalid(String orderId, String remarks);

    /**
     * 订单完成
     * @param orderId 订单号
     * @param orderNo 内部订单号
     * @return
     */
    boolean orderFinish(String orderId, String orderNo);

    /**
     * 紫云网未支付订单
     * @param day           未支付天数
     * @param promotionType 订单类型
     * @return
     */
    List<OrderInfoEntity> selectNotPayZiyunOrderPage(Integer day, String promotionType);

    /**
     * 取消紫云网订单
     * @param records
     */
    String cancelZiyunOrder(List<OrderInfoEntity> records);

    /**
     * 紫云网订单自动确认完成
     * @param records
     */
    void finishZiyunOrder(List<OrderInfoEntity> records);

    R queryPageMallOrderList(Map<String,Object> params);

    /**
     * 大纸订单审核
     */
    R paperAudit(Map<String, Object> params, Long userId, String username);

    /**
     * 数据更新
     * @param map
     * @param orderId
     * @return
     */
    boolean updateByMap(Map<String, Object> map, String orderId);

    /**
     * 获取订单编号
     * @return
     */
    String getOrderId();

    /**
     * 分配自营门店订单
     * @param orderInfo
     * @param orderItemList
     */
    void saveAllotMerchantOrder(OrderInfoEntity orderInfo, List<OrderItemEntity> orderItemList);

    /**
     * 保存备注信息
     * @param orderId
     * @param remarks
     * @param userName
     * @return
     */
    R orderRemarks(String orderId, String remarks, String userName);

    /**
     * 订单作废
     */
    R orderInfoInvalid(String orderId, String remarks, String username);

    /**
     * 订单完成
     */
    R orderInfoFinish(String orderId, String remarks, String username);

    /**
     * 订单调价
     */
    R orderInfoDiscountAudit(String orderId, String discount, String remark, String username);

    /**
     * 订单编辑详情
     * @param orderId
     * @return
     */
    R orderinfoedit(String orderId);

    /**
     * 订单审核详情
     * @param orderId
     * @return
     */
    R orderinfoaudit(String orderId);

    /**
     * 大纸订单详情
     * @param orderId
     * @return
     */
    R paperOrderInfo(Long orderId);

    //根据用户查询订单
    PageUtils getAllOrderInfo(Map<String, Object> params, Integer userId);

    /**
     * 大纸订单审核
     * @param paperItemAuditDto
     * @return
     */
    R paperOrderAudit(PaperItemAuditDto paperItemAuditDto, Long userId, String username);

    void updateFinishStatus(List<String> orderIds);

    Page<OrderInfoEntity> selectNotSendConfirmPage(Page<OrderInfoEntity> page);

    /**
     * 计划任务：查询门店商城订单未转生产系统订单
     * @param sellerId
     */
    List<OrderInfoEntity>  selectNotProductOrderList(Integer sellerId,String datetime);

    /**
     * 大纸订单获取发货信息
     * @param orderId
     * @return
     */
    R sendLogisticsInfo(String orderId);

    /**
     * 添加物流
     * @param erpLogisticsDto
     * @param username
     * @return
     */
    R saveOrderLogisticsInfo(ErpLogisticsDto erpLogisticsDto, String username);

    /**
     * 查询商户奖励金结算订单
     * @return
     */
    List<OrderBonusVo> selectSellerOrderList();

    /**
     * 查询、需要自动确认收款的订单
     * @param page
     * @return
     */
    Page<OrderInfoEntity> selecOrderPayConfirmPage(Page<OrderInfoEntity> page);

    /**
     * 自动确认收款
     * @param list
     */
    void confirmOrderPayTask(List<OrderInfoEntity> list);

    /**
     * 标记异常订单
     * @param orderId
     */
    void adnormal(String orderId);

    /**
     * 订单详情
     * @param orderId
     * @return
     */
    R queryOrderInfo(Long orderId);

    /**
     * 送货单是否开发票
     */
    R orderTax(String orderId, Integer sendTax);

    /**
     * 订单支付
     * @param orderPaymentDto
     * @return
     */
    R orderPayment(OrderPaymentDto orderPaymentDto);

    /**
     * 查询商城订单
     * @param orderId
     * @return
     */
    R querySellerOrderInfo(Long orderId);

    List<Map<String,Object>> memberSyncTwb();

    R orderQuickInvalid(String orderId, String remarks, String username);

    R getOrderLog(Long orderId);

    R getOrderProduction(Long orderId);

    R getOrderLogi(Long orderId);

    R getOrderDesigner(Map<String, Object> map);

    R saveDesinOrderLogisticsInfo(ErpLogisticsDto erpLogisticsDto, String username);
}

